import axios, { AxiosRequestConfig, AxiosResponse } from "axios";

class HttpClient {
  constructor() {
    // 设置默认请求配置
    axios.defaults.baseURL = "";
    axios.defaults.headers.post["Content-Type"] = "application/json";
    axios.defaults.timeout = 10000; // 请求超时时间

    axios.interceptors.request.use(
      (config) => {
        // 可以在这里添加token或其他通用的请求头
        // ...
        return config;
      },
      (error) => {
        // 请求错误处理
        // ...
        return Promise.reject(error);
      }
    );

    axios.interceptors.response.use(
      (response) => {
        // 对响应数据做处理
        // ...
        return response;
      },
      (error) => {
        // 响应错误处理
        // ...
        return Promise.reject(error);
      }
    );
  }

  public request<T>(config: AxiosRequestConfig): Promise<AxiosResponse<T>> {
    // 在请求发送前进行一些处理
    // ...

    return axios(config);
  }

  public get<T>(
    url: string,
    config?: AxiosRequestConfig
  ): Promise<AxiosResponse<T>> {
    return this.request({ ...config, method: "GET", url });
  }

  public post<T>(
    url: string,
    data?: any,
    config?: AxiosRequestConfig
  ): Promise<AxiosResponse<T>> {
    return this.request({ ...config, method: "POST", url, data });
  }

  // 可以根据需要添加其他HTTP方法的封装
}

// 创建实例
const httpClient = new HttpClient();

export default httpClient;
